<?php

require_once 'classes/Race.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';
require_once '../config/config.php';

/**
 * Classe du service CRUD pour la gestion des Races
 * 
 * @author Manixab Billy
 * @date 05.06.2012
 */

class SCrace {
    
    private $db;
    
    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
    }
    
    /**
     * Ajoute une race
     * @param uneRace une race à ajouter
     * @return Message
     */
    public function ajouter($uneRace) {
        try {
            
            $query =  $this->db->prepare("INSERT INTO race " .
                   "(nom, typeDeRace_nom) VALUES(:nom, :typeDeRace_nom)");

            $query->execute(array(
                    'nom'              => $uneRace->getNom(),
                    'typeDeRace_nom'   => $uneRace->getTypeDeRace_nom()
               ));
            

            $query->closeCursor();
        }
        catch(PDOException $e) {
            return new Message("Race non ajoutée: ".$e->getMessage());
        }
        return $uneRace;
    }
    
    /**
     * Methode permettant de modifier une race
     * @param uneRace Race à modifier
     * @return Message  
     */
    public function modifier($uneRaceAModifier) {
        try {
            $query = $this->db->prepare("UPDATE race SET ".
                    "nom = :nom WHERE typeDeRace_nom = :typeDeRace_nom");
            
            $query->execute(array(
                'nom'               => $uneRaceAModifier->getNom(),
                'typeDeRace_nom'    => $uneRaceAModifier->getTypeDeRace_nom()
            ));
            $query->closeCursor();
            
            $message = new Message("Race modifiée");
        }
        catch(PDOException $e) {
            $message = new Message("Race non modifiée: ".$e->getMessage());
        }
        return $message;
    }
    
    /**
     * Methode permettant de supprimer une race
     * @param uneRace une Race à supprimer
     * @return Message
     */
    public function supprimer($uneRace) {
        try{
            $query = $this->db->prepare("DELETE FROM race WHERE typeDeRace_nom = :typeDeRace_nom ".
                    "AND nom = :nom");
            
            $query->execute(array(
                'nom'              => $uneRace->getNom(),
                'typeDeRace_nom'   => $uneRace->getTypeDeRace_nom()
            ));
            
            $query->closeCursor();
            
            $message = new Message("Race supprimé");
        }
        catch(PDOException $e){
            $message = new Message("Race non supprimée: ".$e->getMessage());
        }
        return $message;
    }
    
     /**
     * @param Race de recherche sous forme d'objet Race
     * @return un tableau d'objet Race
     */
    public function lister($raceALister){
        try {
            $query = "SELECT * FROM race ";
            $query_Where="WHERE";
            if ($raceALister != NULL) {
           
                if ($raceALister->getNom() != NULL) {
                    $query_Where .= " nom = '".$raceALister->getNom()."' AND ";
                }
                if ($raceALister->getTypeDeRace_nom() != NULL) {
                    $query_Where .= " typeDeRace_nom = '".$raceALister->getTypeDeRace_nom()."' AND ";
                }
            }
        
            $query_Where = substr($query_Where,0,-5);
            $query .= $query_Where;
            
            $lesRacesTrouves = null;
            $uneRaceLu = null;
            $result=$this->db->query($query);
            
            while($row=$result->fetch()) {
                $uneRaceLu = new Race($row["nom"], $row["typeDeRace_nom"]);
                $lesRacesTrouves[] = $uneRaceLu;
            }

        }
        catch(PDOException $e) {
            print($e->getMessage());
        }
        return $lesRacesTrouves;
    }
    
} 
?>
